package com.manager.commons.mybatis.dao;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * DAO接口基类-封装常用的增删查改操作
 *
 * @param <Model>
 * @author H
 */
public interface GenericDao<Model> {

    /**
     * 插入对象
     *
     * @param model 对象
     */
    int insert(Model model);

    /**
     * 插入对象
     *
     * @param map
     * @return
     */
    int insertMap(Map<?, ?> map);

    /**
     * 更新对象
     *
     * @param model 对象
     */
    int update(Model model);

    /**
     * 更新对象
     *
     * @param map
     */
    int updateMap(Map<?, ?> map);

    /**
     * 删除对象
     *
     * @param map
     * @return
     */
    int deleteMap(Map<?, ?> map);

    /**
     * 销毁对象
     *
     * @param map
     * @return
     */
    int destroyMap(Map<?, ?> map);

    /**
     * 更新插入（存在更新，不存在插入）
     *
     * @param model
     * @return
     */
    int upsert(Model model);

    /**
     * 更新插入（存在更新，不存在插入）
     *
     * @param map
     * @return
     */
    int upsertMap(Map<?, ?> map);

    /**
     * 统计
     *
     * @param map
     * @return
     */
    int countMap(Map<?, ?> map);

    /**
     * 通过参数,查询对象
     *
     * @param map
     * @return
     */
    Model findMap(Map<?, ?> map);

    Model findModel(@Param("_id") String id);

    /**
     * 通过参数,查询对象列表
     *
     * @param map
     * @return
     */
    List<Model> queryMap(Map<?, ?> map);

    /**
     * 改变状态
     *
     * @param map
     * @return
     */
    int statusMap(Map<?, ?> map);

}